from django.shortcuts import redirect
from apis.app01.Teacher import teacher_user, cattention
from apis.user.jwt_app import create_jwt,verify_jwt
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import Posts,Comment,Goods
from .serializers import GoodsSer
from .Posts import posts_data, create_posts, get_user, posts_detail, comment_detail, delete_posts, like_posts, \
    collect_posts, goods_list, promo

#展示所有贴子表
class PostsView(APIView):
    def get(self,request):
        '''
        :param request:模块的参数还有类型的参数（type）最新，最热的排名的参数 页数(page) 每页的限制条数（size）Jwt(非必选)
        :return: 当前页的帖子的信息（问题的内容， 标题， 点赞数， 时间，收藏人数， 帖子的作者，帖子的类型，帖子的唯一ID，帖子作者的id等信息））
        '''
        type = request.GET.get("type",0) #默认是全部
        sort = request.GET.get("sort",0) #默认是最新
        page = request.GET.get('page',1) #默认第一页
        size = request.GET.get('size',1) #默认全部。
        # token = request.META.get("HTTP_TOKEN") #可以没有
        return posts_data(page,size,sort,type)

    def post(self,request):
        '''
        :param request:发问题 （Post） 参数 ： Jwt ,发帖的类型， 标题， 内容， 返回（插入状态）。注意： 登陆状态的判断-----> 跳转登陆， 参数的验证的问题（标题，内容的验证）。（帖子，问题表）
        :return:发帖的状态
        '''
        token = request.META.get("HTTP_TOKEN")
        uid = verify_jwt(token)
        data=request.data
        return  create_posts(data,uid)

#获取个人的信息
class UserView(APIView):
    def get(self,request):
        '''
        :param request:
        :return: 返回个人的信息 user表里面有 具体再做操作
        :TODO:一些学习记录没有展示，需要根据逻辑外键展示
        '''
        uid = request.GET.get("id")
        return get_user(uid)

#获取帖子的详情页，包含评论
class Posts_detail_View(APIView):
    def get(self,request):
        pid = request.GET.get("pid") #帖子的唯一标识
        return posts_detail(pid)


class CommentView(APIView):
    def get(self,request):
        '''
        :param request: 获取下级的评论（get）: 参数： 上级评论的id ,
        :return: 返回当前级别的评论信息（用户的唯一标识， 用户名， image, 评论的内容， 时间， 点赞数,一级评论的id）（评论表）
        '''
        p_id = request.data.get('p_id', '')  #帖子的id
        id = request.data.get('r_id', 0)
        return comment_detail(p_id,id)


class Delete_posts(APIView):
    def delete(self,request):
        token = request.META.get("HTTP_TOKEN")
        pid = request.GET.get("pid")  # 帖子的唯一标识
        uid = verify_jwt(token)
        return delete_posts(pid,uid)
    def post(self,request):
        '''
        删评论（post, delete） 参数：Jwt, 评论的唯一ID， 帖子的唯一标识 返回（删除状态）逻辑问题（权限的校验， 帖子发表者的权限， 一级评论者的权限， 二级就是我们自己发表的消息干掉） 如果是一级的话，我们更改的是那个字段， （我们更改跟一级相关的所有的评论的状态）如果我们是二级的，更改是某一句（根据评论的唯一id）（评论表）
        :param request:
        :return: 删除评论或回复
        :TODO:未完成  判断是发帖人，一级评论人，或者二级评论人
        '''
        token = request.META.get("HTTP_TOKEN")
        pid = request.GET.get("pid")    #帖子的唯一标识
        uid = verify_jwt(token)         #登录用户的id
        id = request.GET.get("id",None) #评论的唯一id
        if not all([pid,id]) :
            return Response({"error_code": 400, "message": "数据不全"})
        if not uid:
            return Response({"error_code": 400, "message": "token已失效"})
        user = Posts.objects.filter(id=pid,uid=uid,status=0).first() #查询是否是发帖人
        if user: #如果是发帖人的话 可以删除第一级评论（删除第一级的话需要删除相应的第二级评论）和第二级评论
            pass
        if not user: #不是发帖人的话，判断是否是一级评论者
            comment=Comment.objects.filter(pid=pid,father_id=0,auther_id=uid,status=0)
            if comment:#如果是一级评论者的话
                if id == comment.id: #如果id等于评论id的话那就删除此评论和关联他的回复
                    comment.status=1
                    comment.save()
                    Comment.objects.filter(father_id=id).update(status=1) #逻辑删除关联一级评论的回复
                    return Response({"error_code": 200, "message": "该评论删除成功"})
                else: #不等于的话 说明他要删除二级关联他的二级评论
                    Comment.objects.filter(id=id).update(status=1)
                    return Response({"error_code": 200, "message": "该评论删除成功"})
            #剩下最后一种方案就是他是二级评论者
            comment1 = Comment.objects.filter(pid=pid,auther_id=uid,status=0)
            if comment1:   #他是二级评论的话
                if id==comment1.id:  #确认这个二级评论，做删除操作
                    comment1.status=1
                    comment1.save()
                    return Response({"error_code": 200, "message": "该评论删除成功"})
            #如果都不是，那就没权限
            return Response({"error_code": 400, "message": "你没有删除的权限"})

#点赞模块
class LikeView(APIView):
    def post(self,request): #点赞
        token = request.META.get("HTTP_TOKEN")
        pid = request.GET.get("pid")  # 帖子的唯一标识
        uid = verify_jwt(token)
        return like_posts(pid,uid)

#收藏模块
class CollectView(APIView):
    def post(self,request):
        token = request.META.get("HTTP_TOKEN")
        pid = request.GET.get("pid")  # 帖子的唯一标识
        uid = verify_jwt(token)
        return collect_posts(pid,uid)

class GoodsView(APIView):
    def get(self,request):
        '''
        :param request:获取商品（get) 参数(goods)（type， page, size, 最新最热综合）
        :return:获取所有的商品（status），id, name, title, price, image, off_price等等
        '''
        category_id = request.GET.get("category_id",0) #默认是全部
        page = request.GET.get("page",1) #页码
        size = request.GET.get('size',1) #每页几个数据
        desc = request.GET.get("desc",0) #默认最新
        # if not all([category_id,page,size,desc]):
        #     return  Response({'error_code':400,"message":"参数缺失"})
        return goods_list(category_id,page,size,desc)

class GoodsDetail(APIView):
    def get(self,request):
        gid =request.GET.get("id")
        if gid:
            goods = Goods.objects.filter(id=gid,status=0).first()
            ser = GoodsSer(goods, many=True)
            return Response({"error_code":200,"message":"数据获取成功","data":ser.data})
        return Response({'error_code':400,"message":"参数缺失"})

#### 5 免费试学（get） 参数：Jwt ,goods_id ------->Jwt(自己写判断）---->返回学习的章节的展示

#### 6 免费试学（post）： Jwt, goods_id,章节，（JWt---->uid）, save(uid, goods_id, 章节， status)

#### 邀请码优化：（点击注册，根据主键ID生成一个唯一标识）




class PromoView(APIView): #生成优惠码
    def get(self,request):
        token = request.META.get("HTTP_TOKEN")
        uid = verify_jwt(token)
        return promo(uid)


class TeacherView(APIView): #获取老师个人的信息和课程信息
    def get(self,request):
        tid = request.GET.get("tid")
        return teacher_user(tid)


class CattentionView(APIView):
    def post(self,request):
        """讲师的关注功能
        :param request:  老师的id 用户的id（token）
        :return:  返回关注是否成功
        """
        tid = request.GET.get("tid")
        token = request.META.get("HTTP_TOKEN")
        uid = verify_jwt(token)
        return cattention(uid,tid)




#测试支付宝
from alipay import AliPay

from rest_framework.permissions import AllowAny

class PaymentView(APIView):
    # permission_classes = [AllowAny]
    def get(self,request):
        # order_id = request.query_params["order_id"] #获取订单号
        # print(order_id)
        alipay = AliPay(
            appid="2016102500761075",
            app_notify_url="http://127.0.0.1:8000/app01/user/",  # 默认回调url
            app_private_key_string="""-----BEGIN PUBLIC KEY-----
            MIIEogIBAAKCAQEAigzq2bfWQTP3hzE6JlFqFfneH5VL6aFVe39/kywH0NLV5gMNbrK/H9l9dZM/fVklHLBRV9JVBmZcsn+Qj4megU3cdDOirqKIu46nA/hqWD1P21SqvD3Ep0yGbpdtgcbcRB3Ue30YUbtrk07K72/ILFy7H/Uhvw36uM9QhOkJ26RngoOkbmhPybd9Gwz4h9CV8kaRt7pQTfXzVVeIQisBkCysL4yR5gCeOOF0BrHxWz6t9uRfAVTP0DnECvvSEc9kdqR/wSm9Y10MF4H4rDa+ct0eDRnaCArs5VTZDPIEmNJI/sQag+9JLa/tUL09vIr+jTd0HJUSF2db6Jucy0QlNQIDAQABAoIBABcqJbpUy8HzK2TnEL/fR3Lak7gvACb66HIpqcmTSNh0mGnZN0bM/Z8lipTRGYU6ES0oNO4MoDHLuWBGYYaEbDF8VDK3e2PcaB84x7O12npmB2FhaqjdoIMGJ0Slaj2tlcZkTwRNsGf+kAWO4iSdWDSBdvDc3EXH3btnJja3N+1AAPNiFb9D+HW5MhKhGaASQY/HcT61X0CrWVko0ZUDVG0YvkQIgmYhmu/di3t9hm38JTLhyQJaAEymIyCkuuDk+JWr4a209HHxJlVahr9RliGuVbOtV7zRAcx9tZtXwBRvXTvAK+/LBcIH6JRU1VQATPNJZvQvjQXTpzwkC50PDgECgYEAwfudTvHbuv63xT1QUZe6ohECUNID4d2bGO+JngVxADiQmIO45SG8Xh0c4+Luo5zWLslqhZpVkz+YP0pf1AowpFpGjWK6WDrBwCGY44HIsthh7G3543BAnuVxMc2+R8SX4lfvx8QZY93w5gBC7/XMeHGybJwavlwnAHfsi9waY7UCgYEAti+OShhK8MyLGETV/0ExXFUUdgRDgOXyYE9z2rDSRmyyUr1KmPzhl5SNPm3oFiQ3rSFBPK81XlneTjD7Ez7pU1APF6X0/X/RyWBkabIXsVggADMnzHQ/wa9a6OSFk7a/GXShWW5oAXRlLi9RmL0jfIC6lr9jsejowa/JcnKmq4ECgYB2jAFXxIDHJ3FBTbYvFu3Mq15h6+bJereVJpZQhvzG6MqdGiq9hL9sOJh2QDIctPVDxH2fxnCzuzKcwyQLHmsZlb32G7bLwqSzeRTJPIBdo9U8Ov1y3B/xu0BQ8m5tx5wWjC0SRSpLGNBmjxRZNzrNBJbIvyGs4f5H0AI0er953QKBgHOZWT/KikKghuGvS9nbE+byVTlNG0f+n/xcbbal28az0bKOSXcpfjsgFz81nb3u3SUNpMdMpSBpBZW3nphnosUqV2k59GmlYQfWEeC/ECmHMUbvLqGcYZgUHCsKVXeUzUzppDeKxpOlt03G2I+B87JcPAjLCAcrMgUz9S6ZcQgBAoGARlWZZ50BPZ6JznTiwAvMVEXG0IkACGQpUtJcvuk//mkSsGbzByIgCAG9A64MLl/8Qwrsz1dFSUx4zGJh8D0Tr6u1Olam66blyB7Wk+NAdErWL7RdZOEXW39SfY/ag8ZZkrECYLYtJgI46CceqvxHN76s/1eaQC+S35zSfbDTaTc=
            -----END PUBLIC KEY-----
""",
            alipay_public_key_string="""-----BEGIN RSA PRIVATE KEY-----
            MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvlGfoDAQU64JYLJN2vm8rktr3MFVqWNi7h0PYtzSe0ohKNSbr1ScfcAGsZflUSVvv1rM0RZ3rS/zYk1qwxEJkewIslrkHUOs2+c3Q0T6YbKowlJZFpN562Oo32SLQSLKObkxzuLoltvj1JL9uGRglYmdIlxneulKBjFvd2Aw2VMr0k96PhGJRI56zthEcWwyZDje6L2bv4SNnpMz/F+F+Ijzloc86xK6cmdpfGC/TVP7epXj4PqHzNFuRq5e9nrou+CU4QVxOBGg8+HzwC+Zw+B+lS6H17mlS/69mb9HgQiz2ZBNetmkM6Qs7Vk4++CNwr73MEphcIec5tTzz8m82wIDAQAB
            -----END RSA PRIVATE KEY-----""",
                                                  # 支付宝的公钥，验证支付宝回传消息使用，不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=False  # 默认False
        )


        order_str = alipay.api_alipay_trade_page_pay(
            subject="买卖服装",
            out_trade_no= '2019191919121',
            total_amount= 1234, #总金额
            return_url = "http://127.0.0.1:8000/app01/user/"  #回调页
        )

        request_url = 'https://openapi.alipaydev.com/gateway.do?' + order_str
        # return Response({
        #     "status": 200,
        #     "msg": "url给你拿到了，看你怎么办",
        #     "data": request_url
        # })
        return redirect(request_url)


